package com.ruoyi.user.service.impl;

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.util.Base64;
import java.util.Hashtable;
import java.util.List;
import java.util.UUID;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.ruoyi.user.utils.QRCode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.user.mapper.MyRepairMapper;
import com.ruoyi.user.domain.MyRepair;
import com.ruoyi.user.service.IMyRepairService;

import javax.imageio.ImageIO;

/**
 * 维修预约Service业务层处理
 * 
 * @author xjl
 * @date 2024-09-13
 */
@Service
public class MyRepairServiceImpl implements IMyRepairService
{
    @Autowired
    private MyRepairMapper myRepairMapper;

    /**
     * 查询维修预约
     * 
     * @param id 维修预约主键
     * @return 维修预约
     */
    @Override
    public MyRepair selectmyRepairById(Long id)
    {
        return myRepairMapper.selectmyRepairById(id);
    }

    /**
     * 查询维修预约列表
     * 
     * @param myRepair 维修预约
     * @return 维修预约
     */
    @Override
    public List<MyRepair> selectmyRepairList(MyRepair myRepair)
    {
        return myRepairMapper.selectmyRepairList(myRepair);
    }

    /**
     * 新增维修预约
     * 
     * @param myRepair 维修预约
     * @return 结果
     */
//    @Override
//    public MyRepair insertmyRepair(MyRepair myRepair)
//    {
//        // 插入数据
//        int result = myRepairMapper.insertmyRepair(myRepair);
//
//        // 检查插入是否成功
//        if (result > 0) {
//            // 插入成功后，MyRepair对象中的id属性会自动填充
//            Long id = myRepair.getId();
//
//            //生成二维码
//
//            // 根据插入的ID查询并返回该记录
//            return myRepairMapper.selectmyRepairById(id);
//        }
//
//        return null; // 如果插入失败，返回null或处理错误逻辑
//    }






    @Override
    public MyRepair insertmyRepair(MyRepair myRepair) {
        // 生成唯一核销码
        String verificationCode = UUID.randomUUID().toString();
        myRepair.setVerificationCode(verificationCode);

        // 插入数据
        int result = myRepairMapper.insertmyRepair(myRepair);

        if (result > 0) {
            Long id = myRepair.getId();
            try {
                // 生成二维码内容，包含核销码等信息
                String qrCodeText = "Repair ID: " + id + ", Verification Code: " + verificationCode;
                String qrCodeImage = generateQRCode(qrCodeText); // 生成Base64的二维码图片

                // 将二维码图片存储到数据库
                myRepair.setVerificationImg(qrCodeImage);
                myRepairMapper.updatemyRepair(myRepair); // 更新记录中的二维码字段
            } catch (Exception e) {
                e.printStackTrace();
            }

            return myRepairMapper.selectmyRepairById(id);
        }

        return null;
    }





//    @Override
//
//    public MyRepair insertmyRepair(MyRepair myRepair) {
//        // 生成唯一核销码
//        String verificationCode = UUID.randomUUID().toString();
//        myRepair.setVerificationCode(verificationCode);
//
//        // 插入数据
//        int result = myRepairMapper.insertmyRepair(myRepair);
//
//        if (result > 0) {
//            Long id = myRepair.getId();
//            try {
//                // 生成二维码内容，包含核销码等信息
//                String qrCodeText = "Repair ID: " + id + ", Verification Code: " + verificationCode;
//                String qrCodeImage = generateQRCode(qrCodeText); // 生成Base64的二维码图片
//
//                // 将二维码图片存储到数据库
//                myRepair.setVerificationImg(qrCodeImage);
//
//                // 保存Base64格式的整车照片和维修部位照片到文件系统
//                String vehiclePhotoPath = saveBase64Image(myRepair.getVehiclePhotos(), "vehicle_" + id);
//                String repairPhotoPath = saveBase64Image(myRepair.getRepairPhotos(), "repair_" + id);
//
//                // 将文件路径存储到数据库
//                myRepair.setVehiclePhotos(vehiclePhotoPath); // 设置整车照片路径
//                myRepair.setRepairPhotos(repairPhotoPath);   // 设置维修部位照片路径
//
//                // 更新记录中的二维码和图片路径字段
//                myRepairMapper.updatemyRepair(myRepair);
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//
//            return myRepairMapper.selectmyRepairById(id);
//        }
//
//        return null;
//    }
//
//    // 将 Base64 字符串保存为文件，并返回文件路径
//    private String saveBase64Image(String base64Image, String fileName) throws Exception {
//        if (base64Image == null || base64Image.isEmpty()) {
//            return null;
//        }
//
//        // 去掉Base64前缀
//        String[] parts = base64Image.split(",");
//        String imageData = parts.length > 1 ? parts[1] : parts[0];
//
//        byte[] imageBytes = Base64.getDecoder().decode(imageData);
//        String filePath = "E:/Desktop/SUCAI/" + fileName + ".png"; // 替换为实际文件路径
//        try (FileOutputStream fos = new FileOutputStream(filePath)) {
//            fos.write(imageBytes);
//        }
//        return filePath; // 返回保存后的文件路径
//    }





    // 生成二维码方法
    private String generateQRCode(String text) throws Exception {
        int width = 300;
        int height = 300;
        Hashtable<EncodeHintType, String> hints = new Hashtable<>();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");

        BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints);
        BufferedImage image = QRCode.toBufferedImage(bitMatrix);

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(image, "png", baos);
        byte[] bytes = baos.toByteArray();

        return Base64.getEncoder().encodeToString(bytes); // 返回Base64二维码图片
    }


    /**
     * 修改维修预约
     * 
     * @param myRepair 维修预约
     * @return 结果
     */
    @Override
    public int updatemyRepair(MyRepair myRepair)
    {
        return myRepairMapper.updatemyRepair(myRepair);
    }

    /**
     * 批量删除维修预约
     * 
     * @param ids 需要删除的维修预约主键
     * @return 结果
     */
    @Override
    public int deletemyRepairByIds(Long[] ids)
    {
        return myRepairMapper.deletemyRepairByIds(ids);
    }

    /**
     * 删除维修预约信息
     * 
     * @param id 维修预约主键
     * @return 结果
     */
    @Override
    public int deletemyRepairById(Long id)
    {
        return myRepairMapper.deletemyRepairById(id);
    }

    @Override
    public int cancelRepair(MyRepair myRepair) {
        return myRepairMapper.updateStatus(myRepair);
    }
}
